package blue_bridge_cup_learning.整数划分;

// 给定正整数 k,m
// 请你根据以下式子 Math.sqrt(x)+⌊log ⁡ k x⌋−m>0
// 计算出符合结果的最小正整数 x。
// 分析
// 需要找到最小的正整数说明需要找到最小的x
// 也就是可以使用第一个模板
public class 计算方程 {
    public static void main(String[] args) {
        int k = 4, m = 6;
        int l = 1, r = Integer.MAX_VALUE;
        while (l < r) {
            int mid = l + r >> 1;
            // 因为该方程是一个单调递增的
            // 如果符合条件那么说明可以x在mid的左边
            // 就缩小右边界
            // 如果不符合条件那么说明x在mid的右边

            if (f(k, m, mid)) {
                r = mid;
            } else {
                l = mid + 1;
            }
        }
        System.out.println("符合条件的x:" + l);
    }

    public static boolean f(int k, int m, int x) {
        return Math.sqrt(x) + (int) (Math.log(x) / Math.log(k)) - m > 0;
    }
}
